﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//struct A
//{
//	int a;//4
//	char b;//1 对齐要是4的整数倍 所以到8
//};
//
//int main()
//{
//	printf("%zd\n", sizeof(struct A));
//
//	return 0;
//}

////联合类型的声明
//union Un
//{
//    char c;
//    int i;
//};
//
//int main()
//{
//    //联合变量的定义
//    union Un un = { 0 };
//    un.i = 0x11223344;
//    un.c = 0x55;
//    printf("%x\n", un.i);//11223355
//    return 0;
//}

//union Un1
//{
//	char c[5];  //按理占5字节就好，但是联合体也有对齐数，int 4字节为最大，所以得是4的整数倍
//	int i;
//};
//struct Un2
//{
//	char c[5];//看元素类型，所以对齐数是1
//	int i;
//};
//union Un3
//{
//	short c[7];
//	int i;
//};
//struct Un4
//{
//	short c[7];//14字节，对齐数为2  2 8 2
//	int i;//4字节，对齐数为4 故在16的偏移量开始存。 4 8 4
//};
//int main()
//{
//	printf("%zd\n", sizeof(union Un1));//8
//	printf("%zd\n", sizeof(struct Un2));//12
//	printf("%zd\n", sizeof(union Un3));//16
//	printf("%zd\n", sizeof(struct Un4));//20
//
//	return 0;
//}

//union Un
//{
//    char a;
//	int b;
//};
//int check_sys()
//{
//    union Un p;
//    p.b = 1;
//    return p.a;
//}
//int main()
//{
//	union Un un;
//	un.a = 'A';
//	un.b = 0x11223344;
//	printf("%x\n", un.a);//44
//	printf("%x\n", un.b);//11223344
//    if (check_sys() == 1)
//    {
//        printf("小端\n");
//    }
//    else
//    {
//        printf("大端\n");
//    }
//	return 0;
//}

//enum Day//星期
//{
//    //枚举类型的可能取值，是常量
//    Mon,
//    Tues,
//    Wed,
//    Thur,
//    Fri,
//    Sat,
//    Sun
//};
//
//enum Sex
//{
//    MALE = 4,//0
//    FEMALE = 8,//1
//    SECRET = 16//2
//};
//#define MALE   1
//#define FEMALE 2
//#define SECRET 3


//int main()
//{
//    enum Sex s = 4;
//    //enum Day d = Sun;
//    //enum Sex s = MALE;
// /*   printf("%d\n", MALE);
//    printf("%d\n", FEMALE);
//    printf("%d\n", SECRET);*/
//
//    return 0;
//}

struct gift_list
{
	int stock_number;//库存量  4B  +浪费4B为了让double对齐
	double price; //定价  8B 
	int item_type;//商品类型  4B   现在20字节

	union {
		struct
		{
			char title[20];//书名
			char author[20];//作者  一共44B
			int num_pages;//⻚数
		}book;
		struct
		{
			char design[30];//设计
		}mug;
		struct
		{
			char design[30];//设计
			int colors;//颜⾊
			int sizes;//尺⼨
		}shirt;
	}item;
};
int main()
{
	struct gift_list m;
	printf("%zd\n", sizeof(m.item));//44
	printf("%zd\n", sizeof(m));//64
	return;
}